#if !defined(ximera_enum_hpp)
#define ximera_enum_hpp

// -----------------------------------------------------------

//! \brief Defines a 'strong enum' which provides its own scope, contrary to regular enums.
//! This allow the names of the values to be free of ugly prefixes like GAMEMODE_SINGLE_PLAYER.
//!
//! An example of how to define your own strong enum:
//! \code
//! XIMERA_ENUM(GameMode)
//!     SinglePlayer,
//!     MultiPlayer,
//!     MultiPlayerOnline
//! XIMERA_ENUM_END(GameMode)
//! \endcode
//!
//! An example of using it would be:
//! \code
//! GameMode mode = GameMode::SINGLE_PLAYER;
//! \endcode
//! \sa XIMERA_ENUM_END
//! \param name The name of the enum
#define XIMERA_ENUM(name) \
    struct name \
    { \
        enum type {

//! Denotes the end of a strong enum
//! \sa XIMERA_ENUM
#define XIMERA_ENUM_END(name)\
        } value;\
		name() {}\
		name(type value) : value(value) {} \
		explicit name(int value) : value(static_cast<type>(value)) {} \
		name& operator =(type value) { this->value = value; return *this; }\
        operator type() const { return value; }\
    };

//operator int() const { return value; }\
// -----------------------------------------------------------

#endif